/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.trandio.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.faces.context.FacesContext;
import javax.naming.NamingException;
//import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSession;
import org.trandio.model.ConfigVO;
import org.trandio.model.PrestadorVO;
import org.trandio.model.SedeVO;
import org.trandio.util.ConexionDb;

/**
 *
 * @author root
 */
public class AutenticacionDAO {

    public AutenticacionDAO() {
    }

    public String validarUsuario(String login, String clave, int idSede) throws NamingException, SQLException {
        String respuesta = "valido";
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String sql = "select * from tb_usuario where login='" + login + "' and clave='" + clave + "'";

        System.out.println("sql login: " + sql);
        PreparedStatement stmt = conn.prepareStatement(sql);
        ResultSet res = stmt.executeQuery();
        if (res.next()) {
            int id = res.getInt("id");
            String usuario = res.getString("login");
            int idesed = res.getInt("id_sede");
            String nombre = res.getString("nombre1") + " " + res.getString("nombre2") + " " + res.getString("apellido1") + " " + res.getString("apellido2");
            SedeDAO sd = new SedeDAO();
            SedeVO sv;
            sv = null;
            sv = sd.getSede(idSede);

            if (sv == null) {
                respuesta = "fallo";
            } else {



                String nomsed = sv.getDescripcion();
                String codpresed = sv.getCodigoprestador();
                int idepresed = sv.getId_prestador();

                PrestadorVO pv = getPrestador(sv.getId_prestador());
                ConfigVO cv = getConfig(sv.getId_prestador());

                FacesContext context = FacesContext.getCurrentInstance();
                HttpSession session = (HttpSession) context.getExternalContext().getSession(true);

                session.setAttribute("id", id);
                session.setAttribute("usuario", usuario);
                session.setAttribute("nombre", nombre);
                session.setAttribute("idesed", idesed);
                session.setAttribute("nomsed", nomsed);
                session.setAttribute("codpresed", codpresed);
                session.setAttribute("idepresed", idepresed);
                session.setAttribute("rutalogo", cv.getRutalogo());
                session.setAttribute("nombrelogo", pv.getLogo());

            }

        } else {
            respuesta = "fallo";
        }


        return respuesta;
    }

    public SedeVO getSede(int idSede) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        SedeVO sedeVO;
        sedeVO = null;
        String sql = "SELECT id, codigo, descripcion, estado, codigo_prestador, id_prestador"
                + " FROM tb_sede "
                + " WHERE tb_sede.id =" + idSede;

        System.out.println("Sql buacar sede ID: " + sql);
        PreparedStatement stmt = conn.prepareStatement(sql);

        try {
            ResultSet res = stmt.executeQuery();
            try {

                if (res.next()) {
                    sedeVO = new SedeVO();
                    sedeVO.setId(res.getInt("id"));
                    sedeVO.setCodigo(res.getString("codigo"));
                    sedeVO.setDescripcion(res.getString("descripcion"));
                    sedeVO.setEstado(res.getString("estado"));
                    sedeVO.setCodigoprestador(res.getString("codigo_prestador"));
                    sedeVO.setId_prestador(res.getInt("id_prestador"));
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed()) {
                conn.close();
            }
        }
        return sedeVO;
    }

    public PrestadorVO getPrestador(int idPrestador) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String sql = "SELECT id, codigo, razon_social, id_tipoidentificacion, logo "
                + " FROM tb_prestador"
                + " WHERE tb_prestador.id =" + idPrestador;

        System.out.println("Sql buacar grupoact ID: " + sql);

        PreparedStatement stmt = conn.prepareStatement(sql);
        PrestadorVO prestadorVO = new PrestadorVO();
        try {
            ResultSet res = stmt.executeQuery();
            try {

                if (res.next()) {
                    prestadorVO.setId(res.getInt("id"));
                    prestadorVO.setCodigo(res.getString("codigo"));
                    prestadorVO.setRazonSocial(res.getString("razon_social"));
                    prestadorVO.setIdTipoIdentificacion(res.getInt("id_tipoidentificacion"));
                    prestadorVO.setLogo(res.getString("logo"));
                }
            } finally {
                res.close();
            }
        } finally {
            stmt.close();
            if (!conn.isClosed()) {
                conn.close();
            }
        }
        return prestadorVO;

    }

    public ConfigVO getConfig(int idPrestador) throws SQLException, NamingException {
        ConexionDb con = new ConexionDb();
        Connection conn;
        conn = con.traerConexion();

        String sql = "SELECT tb_configuracion.id, tb_configuracion.codigo,"
                + "tb_configuracion.descripcion, tb_configuracion.nit,"
                + "tb_configuracion.direccion, tb_configuracion.telefono,"
                + "tb_configuracion.rutalogo, tb_configuracion.rutarips,"
                + "tb_configuracion.prefijo_fact, tb_configuracion.cons_inifact,"
                + "tb_configuracion.cons_finfact, tb_configuracion.cons_actfact "
                + "FROM tb_configuracion "
                + "where tb_configuracion.id_prestador=" + idPrestador;

        PreparedStatement stmt = conn.prepareStatement(sql);

        ResultSet res = stmt.executeQuery();
        ConfigVO configVO = new ConfigVO();
        if (res.next()) {
            configVO.setRutalogo(res.getString("rutalogo"));
            configVO.setRutarips(res.getString("rutarips"));
            configVO.setCons_actfact(res.getInt("cons_actfact"));
            configVO.setPrefijo_fact(res.getString("prefijo_fact"));
            configVO.setCons_inifact(res.getInt("cons_inifact"));
            configVO.setCons_finfact(res.getInt("cons_finfact"));
            configVO.setCod_ips(res.getString("codigo"));
            configVO.setCod_ips(res.getString("cons_actfact"));
            //configVO.setCod_pres(res.getString("cod_pres"));
        }

        res.close();
        stmt.close();
        if (!conn.isClosed()) {
            conn.close();
        }



        return configVO;
    }
}
